home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / v cisle / tclock / tclocklight-040702-3.exe / source / property / pagesize.c < prev    next >
C/C++ Source or Header  |  2004-09-07  |  5KB  |  194 lines

  1. /*-------------------------------------------------------------
  2.   pagesize.c : "Size and Position" page of properties
  3.   (C) Kazuto Sato 1997-2003
  4.   For the license, please read readme.txt.
  5.   
  6.   Written by Kazubon, Nanashi-san
  7. ---------------------------------------------------------------*/
  8.  
  9. #include "tcprop.h"
  10.  
  11. /* Globals */
  12.  
  13. BOOL CALLBACK PageSizeProc(HWND hDlg, UINT message,
  14.     WPARAM wParam, LPARAM lParam);
  15.  
  16. /* Statics */
  17.  
  18. static void SendPSChanged(HWND hDlg);
  19. static void OnInit(HWND hDlg);
  20. static void OnApply(HWND hDlg);
  21. static void OnFitClock(HWND hDlg);
  22. static BOOL  m_bInit = FALSE;
  23. static BOOL  m_bChanged = FALSE;
  24.  
  25. /*------------------------------------------------
  26.   Dialog procedure
  27. --------------------------------------------------*/
  28. BOOL CALLBACK PageSizeProc(HWND hDlg, UINT message,
  29.     WPARAM wParam, LPARAM lParam)
  30. {
  31.     switch(message)
  32.     {
  33.         case WM_INITDIALOG:
  34.             OnInit(hDlg);
  35.             return TRUE;
  36.         case WM_COMMAND:
  37.         {
  38.             WORD id, code;
  39.             id = LOWORD(wParam); code = HIWORD(wParam);
  40.             switch(id)
  41.             {
  42.                 case IDC_ALIGNLEFT:
  43.                 case IDC_ALIGNCENTER:
  44.                 case IDC_ALIGNRIGHT:
  45.                     SendPSChanged(hDlg);
  46.                     break;
  47.                 case IDC_FITCLOCK:
  48.                     OnFitClock(hDlg);
  49.                     SendPSChanged(hDlg);
  50.                     break;
  51.                 case IDC_CLOCKHEIGHT:
  52.                 case IDC_CLOCKWIDTH:
  53.                 case IDC_VERTPOS:
  54.                 case IDC_LINEHEIGHT:
  55.                     if(code == EN_CHANGE) SendPSChanged(hDlg);
  56.                     break;
  57.             }
  58.             return TRUE;
  59.         }
  60.         case WM_NOTIFY:
  61.             switch(((NMHDR *)lParam)->code)
  62.             {
  63.                 case PSN_APPLY: OnApply(hDlg); break;
  64.                 case PSN_HELP: MyHelp(GetParent(hDlg), "Size"); break;
  65.             }
  66.             return TRUE;
  67.     }
  68.     return FALSE;
  69. }
  70.  
  71. /*------------------------------------------------
  72.   notify parent window to enable "Apply" button
  73. --------------------------------------------------*/
  74. void SendPSChanged(HWND hDlg)
  75. {
  76.     if(m_bInit)
  77.     {
  78.         g_bApplyClock = TRUE;
  79.         m_bChanged = TRUE;
  80.         SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)(hDlg), 0);
  81.     }
  82. }
  83.  
  84. /*------------------------------------------------
  85.   Initialize
  86. --------------------------------------------------*/
  87. void OnInit(HWND hDlg)
  88. {
  89.     int nTextPos, id;
  90.     
  91.     m_bInit = FALSE;
  92.     
  93.     // common/tclang.c
  94.     SetDialogLanguage(hDlg, "Size", g_hfontDialog);
  95.     
  96.     UpDown_SetBuddy(hDlg, IDC_SPINVPOS,    IDC_VERTPOS);
  97.     UpDown_SetBuddy(hDlg, IDC_SPINLHEIGHT, IDC_LINEHEIGHT);
  98.     UpDown_SetBuddy(hDlg, IDC_SPINCWIDTH,  IDC_CLOCKWIDTH);
  99.     UpDown_SetBuddy(hDlg, IDC_SPINCHEIGHT, IDC_CLOCKHEIGHT);
  100.     
  101.     nTextPos = GetMyRegLong(NULL, "TextPos", 0);
  102.     if(nTextPos == 1) id = IDC_ALIGNLEFT;
  103.     else if(nTextPos == 2) id = IDC_ALIGNRIGHT;
  104.     else id = IDC_ALIGNCENTER;
  105.     CheckRadioButton(hDlg, IDC_ALIGNLEFT, IDC_ALIGNRIGHT, id);
  106.     
  107.     UpDown_SetRange(hDlg, IDC_SPINVPOS, 32, -32);
  108.     UpDown_SetPos(hDlg, IDC_SPINVPOS,
  109.         GetMyRegLong(NULL, "VertPos", 0));
  110.     
  111.     UpDown_SetRange(hDlg, IDC_SPINLHEIGHT, 32, -32);
  112.     UpDown_SetPos(hDlg, IDC_SPINLHEIGHT,
  113.         GetMyRegLong(NULL, "LineHeight", 0));
  114.     
  115.     if(g_winver&WINXP)
  116.         CheckDlgButton(hDlg, IDC_FITCLOCK,
  117.             GetMyRegLong(NULL, "FitClock", TRUE));
  118.     else
  119.         EnableDlgItem(hDlg, IDC_FITCLOCK, FALSE);
  120.     
  121.     UpDown_SetRange(hDlg, IDC_SPINCWIDTH, 32, -32);
  122.     UpDown_SetPos(hDlg, IDC_SPINCWIDTH,
  123.         GetMyRegLong(NULL, "ClockWidth", 0));
  124.     
  125.     UpDown_SetRange(hDlg, IDC_SPINCHEIGHT, 32, -32);
  126.     UpDown_SetPos(hDlg, IDC_SPINCHEIGHT,
  127.         GetMyRegLong(NULL, "ClockHeight", 0));
  128.     
  129.     OnFitClock(hDlg);
  130.     
  131.     m_bInit = TRUE;
  132. }
  133.  
  134. /*------------------------------------------------
  135.   Apply
  136. --------------------------------------------------*/
  137. void OnApply(HWND hDlg)
  138. {
  139.     int nTextPos;
  140.     
  141.     if(!m_bChanged) return;
  142.     m_bChanged = FALSE;
  143.     
  144.     if(IsDlgButtonChecked(hDlg, IDC_ALIGNLEFT)) nTextPos = 1;
  145.     else if(IsDlgButtonChecked(hDlg, IDC_ALIGNRIGHT)) nTextPos = 2;
  146.     else nTextPos = 0;
  147.     SetMyRegLong(NULL, "TextPos", nTextPos);
  148.     
  149.     SetMyRegLong(NULL, "VertPos", UpDown_GetPos(hDlg, IDC_SPINVPOS));
  150.     SetMyRegLong(NULL, "LineHeight", UpDown_GetPos(hDlg, IDC_SPINLHEIGHT));
  151.     SetMyRegLong(NULL, "ClockWidth", UpDown_GetPos(hDlg, IDC_SPINCWIDTH));
  152.     SetMyRegLong(NULL, "ClockHeight", UpDown_GetPos(hDlg, IDC_SPINCHEIGHT));
  153.     
  154.     SetMyRegLong(NULL, "FitClock",
  155.         IsDlgButtonChecked(hDlg, IDC_FITCLOCK));
  156. }
  157.  
  158. /*------------------------------------------------
  159.   "Fit clock to tray"
  160. --------------------------------------------------*/
  161. void OnFitClock(HWND hDlg)
  162. {
  163.     HWND hwndBar, hwnd;
  164.     RECT rc;
  165.     BOOL b1, b2;
  166.     
  167.     if(!(g_winver&WINXP)) return;
  168.     
  169.     if(IsDlgButtonChecked(hDlg, IDC_FITCLOCK))
  170.     {
  171.         b1 = TRUE; b2 = FALSE;
  172.         hwndBar = GetTaskbarWindow();
  173.         if(hwndBar != NULL)
  174.         {
  175.             GetClientRect(hwndBar, &rc);
  176.             // vertical task bar
  177.             if(rc.right < rc.bottom)
  178.             {
  179.                 b1 = FALSE; b2 = TRUE;
  180.             }
  181.         }
  182.     }
  183.     else { b1 = b2 = TRUE; }
  184.     
  185.     hwnd = GetDlgItem(hDlg, IDC_CLOCKWIDTH);
  186.     EnableWindow(hwnd, b1);
  187.     EnableWindow(GetWindow(hwnd, GW_HWNDNEXT), b1);
  188.     EnableWindow(GetWindow(hwnd, GW_HWNDPREV), b1);
  189.     hwnd = GetDlgItem(hDlg, IDC_CLOCKHEIGHT);
  190.     EnableWindow(hwnd, b2);
  191.     EnableWindow(GetWindow(hwnd, GW_HWNDNEXT), b2);
  192.     EnableWindow(GetWindow(hwnd, GW_HWNDPREV), b2);
  193. }
  194.